import socket


def send_file_2_client(new_client_socket, client_addr):
    # 1.接收客户端需要下载的文件名
    # 接收客户端发送的 要下载的文件名
    # 接收客户端发送过来的要下载的文件名
    file_name = new_client_socket.recv(1024)
    print("客户端需要下载文件是: %s" % str(client_addr), file_name.decode("utf-8"))
    # 2.打开这个文件,读取数据
    file_content = None
    try:
        f = open(file_name, "rb")
        file_content = f.read()
        f.close()
    except Exception as ret:
        print("没有要下载的文件:%s" % file_name)

    # 3.发送文件的数据给客户端
    if file_content:
        # 回送一部分数据给客户端
        new_client_socket.send(file_content)


def main():
    # 创建套接字
    file_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # bind设置本地信息(ip,port)
    file_server.bind(("", 7890))
    # 3.让默认的套接字有主动变为被动,一般默认写128
    file_server.listen(128)
    # 为多个客户端服务
    while True:
        # 等待客户端连接accept
        new_client_socket, client_addr = file_server.accept()
        # 调用发送文件函数,完成对客户端服务
        send_file_2_client(new_client_socket, client_addr)

        # 关闭套接字
        new_client_socket.close()
    file_server.close()


if __name__ == "__main__":
    main()
